package com.coolading.base.service.impl;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.coolading.base.dao.BaseDao;
import com.coolading.base.service.BaseService;


@Service
@Transactional
public class BaseServiceImpl implements BaseService{

	@Resource
	private BaseDao entityDAO;

	public BaseDao getEntityDAO() {

		return this.entityDAO;
	}

	public void setEntityDAO(BaseDao entityDAO) {

		this.entityDAO = entityDAO;
	}

	/**
	  * Title: delete
	  * Description:(删除对象)
	  * @param object
	  * @see com.tht.common.service.BaseService#delete(java.lang.Object)
	 */
	public void delete(Object object) {

		this.entityDAO.delete(object);
	}
	/**
	 * deleteAll(删除对象集合)
	 * 
	 * @Title: deleteAll
	 * @author chenqi
	 * @param paramList
	 *            对象集合
	 * @return void 返回类型
	 * @throws
	 */
	@SuppressWarnings("rawtypes")
	public void deleteAll(List list) {

		this.entityDAO.deleteAll(list);
	}

	/**
	 * execUpdateHql(根据hql语句修改)
	 * 
	 * @Title: execUpdateHql
	 * @author chenqi
	 * @param hql
	 * @return
	 * @return int 返回类型
	 * @throws
	 */
	public int execUpdateHql(String hql) {

		return this.entityDAO.execUpdateHql(hql);
	}

	/**
	 * execUpdateSql(根据hql语句修改)
	 * 
	 * @Title: execUpdateSql
	 * @author chenqi
	 * @param sql
	 * @return
	 * @return int 返回类型
	 * @throws
	 */
	public int execUpdateSql(String sql) {

		return this.entityDAO.execUpdateSql(sql);
	}

	/**
	  * Title: findByHql
	  * Description:(根据hql查询对象集合))
	  * @param hql
	  * @return
	  * @see com.tht.common.service.BaseService#findByHql(java.lang.String)
	 */
	public List<?> findByHql(String hql) {

		return this.entityDAO.findByHql(hql);
	}
	/**
	 * findBySql(根据sql查询对象集合)
	 * 
	 * @Title: findBySql
	 * @author chenqi
	 * @param hql
	 * @return
	 * @return List 返回类型
	 * @throws
	 */
	public List<?> findBySql(String sql) {

		return this.entityDAO.findBySql(sql);
	}

	/**
	 * findByHql(根据hql查询size条对象集合)
	 * 
	 * @Title: findByHql
	 * @author chenqi
	 * @param hql
	 * @param size
	 * @return List 返回类型
	 * @throws
	 */
	public List<?> findByHql(String hql, int size) {

		return this.entityDAO.findByHql(hql, size);
	}

	/**
	 * findByHql(根据hql分页查询对象集合)
	 * 
	 * @Title: findByHql
	 * @author chenqi
	 * @param hql
	 * @param currSize
	 *            当前条数
	 * @param pageSize
	 *            查询条数
	 * @return List 返回类型
	 * @throws
	 */
	public List<?> findByHql(String hql, int minSize, int maxSize) {

		return this.entityDAO.findByHql(hql, minSize, maxSize);
	}

	/**
	 * findById(根据主键查询对象)
	 * 
	 * @Title: findById
	 * @author chenqi
	 * @param paramClass
	 * @param paramSerializable
	 *            主键
	 * @return Object 返回类型
	 * @throws
	 */
	public <T> T findById(Class<T> clazz, Serializable id) {

		return this.entityDAO.findById(clazz, id);
	}

	/**
	 * findByNamedParam(根据一个条件的hql查询对象集合信息)
	 * 
	 * @Title: findByNamedParam
	 * @author chenqi
	 * @param hql
	 * @param paramString
	 *            参数名
	 * @param paramObject
	 *            参数值
	 * @return List 返回类型
	 * @throws
	 */
	public List<?> findByNamedParam(String hql, String paramName, Object paramValue) {

		List<?> list = this.entityDAO.findByNamedParam(hql, paramName, paramValue);
		if ((list != null) && (list.size() > 0)) {
			return list;
		}
		return null;
	}

	
	/**
	 * findByNamedParam(根据多个条件的hql查询对象集合信息)
	 * 
	 * @Title: findByNamedParam
	 * @author chenqi
	 * @param hql
	 * @param paramArrayOfString
	 *            数组参数名
	 * @param paramArrayOfObject
	 *            数组参数值
	 * @return List 返回类型
	 * @throws
	 */
	@SuppressWarnings("rawtypes")
	public List<?> findByNamedParam(String hql, String[] paramName,
			Object[] paramValue) {

		List list = this.entityDAO.findByNamedParam(hql, paramName, paramValue);
		if ((list != null) && (list.size() > 0)) {
			return list;
		}
		return null;
	}

	

	/**
	 * findByNamedParam(根据一个条件的hql查询对象集合信息返回size条信息)
	 * 
	 * @Title: findByNamedParam
	 * @author chenqi
	 * @param hql
	 * @param paramString
	 *            参数名
	 * @param paramObject
	 *            参数值
	 * @param size
	 *            条数
	 * @return List 返回类型
	 * @throws
	 */
	public List<?> findByNamedParam(String hql, String paramName,
			Object paramValue, int size) {

		List<?> list = this.entityDAO.findByNamedParam(hql, paramName, paramValue,
				size);
		if ((list != null) && (list.size() > 0)) {
			return list;
		}
		return null;
	}

	
	/**
	 * findByNamedParam(根据多个条件的hql查询对象集合信息返回size条信息)
	 * 
	 * @Title: findByNamedParam
	 * @author chenqi
	 * @param hql
	 * @param paramArrayOfString
	 *            数组参数名
	 * @param paramArrayOfObject
	 *            数组参数值
	 * @param size
	 *            条数
	 * @return List 返回类型
	 * @throws
	 */
	public List<?> findByNamedParam(String hql, String[] paramName,
			Object[] paramValue, int size) {

		List<?> list = this.entityDAO.findByNamedParam(hql, paramName, paramValue,
				size);
		if ((list != null) && (list.size() > 0)) {
			return list;
		}
		return null;
	}

	
	/**
	 * flush(可以强制进行从内存到数据库的同步)
	 * 
	 * @Title: flush
	 * @author chenqi
	 * @return void 返回类型
	 * @throws
	 */
	public void flush() {

		this.entityDAO.flush();
	}

	/**
	 * save(保存对象)
	 * 
	 * @Title: save
	 * @author chenqi
	 * @param paramObject
	 *            对象
	 * @return Serializable 返回类型
	 * @throws
	 */
	public Serializable save(Object object) {

		return this.entityDAO.save(object);
	}

	/**
	 * saveAll(保存对象集合)
	 * 
	 * @Title: saveAll
	 * @author chenqi
	 * @param paramList
	 *            对象集合
	 * @return void 返回类型
	 * @throws
	 */
	@SuppressWarnings("rawtypes")
	public void saveAll(List list) {

		this.entityDAO.saveAll(list);
	}
	/**
	 * saveOrUpdate(保存或修改对象)
	 * 
	 * @Title: saveOrUpdate
	 * @author chenqi
	 * @param paramObject
	 *            对象
	 * @return void 返回类型
	 * @throws
	 */
	public void saveOrUpdate(Object object) {

		this.entityDAO.saveOrUpdate(object);
	}

	/**
	 * update(保存对象)
	 * 
	 * @Title: update
	 * @author chenqi
	 * @param paramObject
	 *            对象
	 * @return Serializable 返回类型
	 * @throws
	 */
	public void update(Object object) {

		this.entityDAO.update(object);
	}
	/**
	 * updateAll(修改对象集合)
	 * 
	 * @Title: updateAll
	 * @author chenqi
	 * @param paramList
	 * @return void 返回类型
	 * @throws
	 */
	@SuppressWarnings("rawtypes")
	public void updateAll(List list) {

		this.entityDAO.updateAll(list);
	}

	/**
	 * evict(会把指定的缓冲对象进行清除)
	 * 
	 * @Title: evict
	 * @author chenqi
	 * @param paramClass
	 * @param paramSerializable
	 *            序列id
	 * @return void 返回类型
	 * @throws
	 */
	public <T> void evict(Class<T> clazz, Serializable id) {

		this.entityDAO.evict(clazz, id);
	}

	/**
	 * findMapBySql(根据sql查询map)
	 * 
	 * @Title: findMapBySql
	 * @author chenqi
	 * @param sql
	 * @return Map 返回类型
	 * @throws
	 */
	@SuppressWarnings("rawtypes")
	@Override
	public Map findMapBySql(String sql) {

		// TODO Auto-generated method stub
		return this.entityDAO.findMapBySql(sql);
	}

	/**
	 * findKeyMapBySql(根据sql查询key value模式map)
	 * 
	 * @Title: findKeyMapBySql
	 * @author chenqi
	 * @param sql
	 * @return Map 返回类型
	 * @throws
	 */
	@SuppressWarnings("rawtypes")
	@Override
	public Map findKeyMapBySql(String sql) {

		// TODO Auto-generated method stub
		return this.entityDAO.findKeyMapBySql(sql);
	}

	/**
	 * findListMapBySql(根据sql查询map集合)
	 * 
	 * @Title: findListMapBySql
	 * @author chenqi
	 * @param sql
	 * @return List 返回类型
	 * @throws
	 */
	@Override
	public List<?> findListMapBySql(String sql) {

		// TODO Auto-generated method stub
		return this.entityDAO.findListMapBySql(sql);
	}

	/**
	 * getPageVO(根据条件hql分页查询对象信息)
	 * 
	 * @Title: getPageVO
	 * @Description: TODO
	 * @param @param hql
	 * @param @param begin
	 * @param @param rows
	 * @param @param paramValue
	 * @return List 返回类型
	 * @throws
	 */
	@Override
	public List<?> getPageVO(String hql, int begin, int rows, Object[] paramValue) {

		return this.entityDAO.getPageVO(hql, begin, rows, paramValue);
	}

	/**
	 * getPageTotalVO(根据条件hql查询对象信息)
	 * 
	 * @Title: getPageTotalVO
	 * @author chenqi
	 * @param hql
	 * @param paramValue
	 * @return
	 * @return List 返回类型
	 * @throws
	 */
	@Override
	public List<?> getPageTotalVO(String hql, Object[] paramValue) {

		// TODO Auto-generated method stub
		return this.entityDAO.getPageTotalVO(hql, paramValue);
	}

	/**
	 * callProcBySql(存储过程)
	 * 
	 * @Title: callProcBySql
	 * @author chenqi
	 * @param hql
	 * @param paramValue
	 * @return
	 * @return List 返回类型
	 * @throws
	 */
	@Override
	public int callProcBySql(String sql, Object[] paramValue) {

		// TODO Auto-generated method stub
		return this.entityDAO.callProcBySql(sql, paramValue);
	}

	/**
	 * findAllByPageAndPageSize(根据对象名、页数、当前条数获取分页集合)
	 * @author chenqi
	 * @date 2014年7月10日 下午8:21:03
	 * @param className
	 * @param currPage
	 * @param pageSize
	 * @return
	 */
	@Override
	public Map<String, Object> findAllByPageAndPageSize(String className,
			int currPage, int pageSize) {
		
		// TODO Auto-generated method stub
		return this.entityDAO.findAllByPageAndPageSize(className, currPage, pageSize);
	}

	/**
	 * findAll(查询所有)
	 * @author chenqi
	 * @date 2014年7月10日 下午8:33:10
	 * @param className
	 * @return
	 */
	@Override
	public List<?> findAll(String className) {
		
		// TODO Auto-generated method stub
		return this.entityDAO.findAll(className);
	}

	/**
	 * findPageTotalCount(查询分页总数)
	 * @author chenqi
	 * @date 2014年7月11日 上午9:27:04
	 * @param hql
	 * @return
	 */
	@Override
	public int findPageTotalCount(String hql) {
		
		return this.entityDAO.findPageTotalCount(hql);
	}

	@Override
	public <T> List<?> findBySqlAndClass(String sql, Class<T> cl) {
		
		return this.entityDAO.findBySqlAndClass(sql, cl);
	}

	@Override
	public List<?> findBySqlAndNamedParam(String paramString,
			String[] paramArrayOfString, Object[] paramArrayOfObject,
			int minSize, int maxSize) {
		
		return this.entityDAO.findBySqlAndNamedParam(paramString, 
				paramArrayOfString, paramArrayOfObject, minSize, maxSize);
	}
}
